// 导入数据库操作模块
const db = require('../db/index')
// 导入处理密码的模块
const bcrypt = require('bcryptjs')

// 位置信息的路由处理函数
exports.posHistory = (req, res) => {

  const postInfo = req.body
  console.log(postInfo)
  // 定义插入新用户的 SQL 语句
  const sql = 'insert into pos_history set ?'
  // 调用 db.query() 执行 SQL 语句
  db.query(sql, { user_id: req.user.openid, latitude: postInfo.latitude, longitude: postInfo.longitude, name: postInfo.name, address: postInfo.address }, (err, results) => {
    // 判断 SQL 是否执行成功
    if (err) return res.cc(err)
    // 判断影响行数是否大于0
    if (results.affectedRows === 0) return res.cc('服务器繁忙，请稍后再试!')
    // 注册用户成功
    res.send({
      status: 0,
      message: '位置记录写入成功！'
    })
  })
}
// 骑行记录的路由处理函数
exports.rideHistory = (req, res) => {
  const info = req.user
  const rideInfo = req.body
  console.log(rideInfo)
  // 定义插入新用户的 SQL 语句
  const sql = `insert into ride_record set ?`
  // 调用 db.query() 执行 SQL 语句
  db.query(sql, {
    user_id: info.openid,
    start_latitude: rideInfo.start_latitude,
    start_longitude: rideInfo.start_longitude,
    end_latitude: rideInfo.end_latitude,
    end_longitude: rideInfo.end_longitude,
    start_time: rideInfo.startTime,
    end_time: rideInfo.endTime,
    duration: rideInfo.duration
  }, (err, results) => {
    // 判断 SQL 是否执行成功
    if (err) return res.cc(err)
    // 判断影响行数是否大于0
    if (results.affectedRows !== 1) return res.cc('服务器繁忙，请稍后再试!')
    // 写入成功
    res.send({
      status: 0,
      message: '骑行记录写入成功！'
    })
  })
}


// 获取骑行记录的处理函数
exports.rideRecord = (req, res) => {
  // 定义查询用户信息的 SQL 语句
  const sql = `select start_latitude, start_longitude, end_latitude, end_longitude, start_time, end_time, duration from ride_record where user_id=?`
  // 调用 db.query() 执行 SQL 语句
  // console.log(req)
  db.query(sql, req.user.openid, (err, result) => {
    // 执行 SQL 语句失败
    if (err) return res.cc(err)
    // 执行 SQL 语句成功，但是查询的结果可能为空
    if (result.length === 0) {
      return res.send({
        status: 0,
        message: '暂无骑行记录！',
        data: result,
      })
    }
    // console.log(result)
    // 用户信息获取成功
    res.send({
      status: 0,
      message: '获取数据成功!',
      data: result,
    })
  })
}

// 获取骑行记录的处理函数
exports.rideRecordLast = (req, res) => {
  // 定义查询用户信息的 SQL 语句
  const sql = `select start_latitude, 
  start_longitude, end_latitude, end_longitude, start_time, end_time, 
  duration, electric from ride_record 
  where user_id=? order by id DESC limit 1;`
  // 调用 db.query() 执行 SQL 语句
  // console.log(req)
  db.query(sql, req.user.openid, (err, result) => {
    // 执行 SQL 语句失败
    if (err) return res.cc(err)
    // 执行 SQL 语句成功，但是查询的结果可能为空
    // if (result.length === 0) return res.cc('获取位置信息失败！')
    // console.log(result)
    // 用户信息获取成功
    res.send({
      status: 0,
      message: '获取数据成功!',
      data: result,
    })
  })
}




exports.getToken = (req, res) => {
  res.render("login", {})
  // res.send('userInfo OK')
}


// 获取用户基本信息的处理函数
exports.getUserInfo = (req, res) => {
  // 定义查询用户信息的 SQL 语句
  const sql = 'select id, username, nickname, email, user_pic from ev_users where id=?'
  // 调用 db.query() 执行 SQL 语句
  // console.log(req)
  db.query(sql, req.user.id, (err, result) => {
    // 执行 SQL 语句失败
    if (err) return res.cc(err)
    // 执行 SQL 语句成功，但是查询的结果可能为空
    if (result.length === 0) return res.cc('获取用户列表失败！')

    // 用户信息获取成功
    res.send({
      status: 0,
      message: '获取数据成功!',
      data: result[0]
    })
  })
}

// 更新用户基本信息的处理函数
exports.updateUserInfo = (req, res) => {
  // 定义待执行的 SQL 语句
  const sql = 'update ev_users set ? where id=?'
  // 调用 db.query() 执行 SQL 语句并传递参数
  db.query(sql, [req.body, req.body.id], (err, results) => {
    // 执行 SQL 语句失败
    if (err) return res.cc(err)
    // 执行 SQL 语句成功，但是影响行数为0
    if (results.affectedRows === 0) return res.cc('更新用户的基本信息失败!')
    // 成功
    res.cc('更新用户信息成功!', 0)
  })
}

// 更新用户密码的处理函数
exports.updatePassword = (req, res) => {
  // 根据 id 查询用户的信息
  const sql = 'select * from ev_users where id=?'
  // 执行根据 id 查询用户的信息的 SQL 语句
  db.query(sql, req.user.id, (err, results) => {
    // 执行 SQL 语句失败
    if (err) return res.cc(err)
    // 判断结果是否存在
    if (results.length !== 1) return res.cc('用户不存在!')

    // 判断用户输入的旧密码是否正确
    const compareResult = bcrypt.compareSync(req.body.oldPwd, results[0].password)
    if (!compareResult) return res.cc('原密码错误!')


    // 定义更新密码的 SQL 语句
    const sql = 'update ev_users set password=? where id=?'
    // 对新密码进行加密处理
    const newPwd = bcrypt.hashSync(req.body.newPwd, 10)
    // 调用 db.query() 执行 SQL 语句
    db.query(sql, [newPwd, req.user.id], (err, result) => {
      // 执行 SQL 语句失败
      if (err) return res.cc(err)
      // 判断影响的行数
      if (results.affectedRows === 0) return res.cc('修改密码失败!')
      // 成功
      res.cc('修改密码成功!', 0)
    })
  })
}

// 更新用户头像的处理函数
exports.updateAvatar = (req, res) => {
  // 1. 定义更换头像的 SQL 语句
  const sql = 'update ev_users set user_pic=? where id=?'
  // 2. 调用 db.query() 执行 SQL 语句
  db.query(sql, [req.body.avatar, req.user.id], (err, results) => {
    // 执行 SQL 语句失败
    if (err) return res.cc(err)
    // 影响行数是否为0
    if (res.affectedRows === 0) return res.cc('更换头像失败!')
    // 成功
    res.cc('更换头像成功!', 0)
  })
}
